/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package LogicaNegocio.Controlador;

import AccesoDatos.Persistencia.Manager.ManagerInformes;
import GUI.Jefe.GestionInformes.PanelConsultarLibrosPorArea;
import LogicaNegocio.Biblioteca.Libro;
import LogicaNegocio.Documento.DocumentoPDF;
import LogicaNegocio.Documento.FiltroDocumentos;
import com.itextpdf.text.BadElementException;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 * Esta clase en java permite el control de eventos generados
 * desde el panel consultar libros por area.
 *
 *
 * @author sebaxtian
 * Archivo: ControlConsultarLibrosPorArea.java
 * @version 1.0
 * Fecha: mié jun  9 15:46:26 COT 2010
 */


public class ControlConsultarLibrosPorArea {

    //Atributos de clase.
    private PanelConsultarLibrosPorArea panelConsultarLibrosPorArea;
    private ManagerInformes gestorInformes;
    private List<Libro> listaLibrosPorArea;


    public ControlConsultarLibrosPorArea(PanelConsultarLibrosPorArea panelConsultarLibrosPorArea) {
        this.panelConsultarLibrosPorArea = panelConsultarLibrosPorArea;
        gestorInformes = new ManagerInformes();
        listaLibrosPorArea = new ArrayList<Libro>();
    }

    public void consultar() {
        String nombreArea = panelConsultarLibrosPorArea.textFieldArea.getText();
        listaLibrosPorArea = gestorInformes.obtenerLibrosPorArea(nombreArea);
        if(listaLibrosPorArea.size() != 0){
            mostrarLibrosPorArea(listaLibrosPorArea);
        }else{
            JOptionPane.showMessageDialog(panelConsultarLibrosPorArea, "La consulta no encotro libros que pertenecen a "+nombreArea, "Libros Por Area", JOptionPane.INFORMATION_MESSAGE);
        }
    }

    private void mostrarLibrosPorArea(List<Libro> listaLibrosPorArea) {
        Libro libro;
        Calendar fecha = Calendar.getInstance();
        for(int i = 0; i < listaLibrosPorArea.size(); i++) {
            if(panelConsultarLibrosPorArea.tablaLibros.getRowCount() <= i){
                DefaultTableModel tmp = (DefaultTableModel)panelConsultarLibrosPorArea.tablaLibros.getModel();
                Object fila[] = {"","","","","",""};
                tmp.addRow(fila);
            }
            libro = listaLibrosPorArea.get(i);
            fecha.setTime(libro.getAnoPublicacion());
            String fechaPublicacion = fecha.get(Calendar.DAY_OF_MONTH)+"/"+(fecha.get(Calendar.MONTH)+1)+"/"+fecha.get(Calendar.YEAR);
            panelConsultarLibrosPorArea.tablaLibros.setValueAt(libro.getIsbn(), i, 0);
            panelConsultarLibrosPorArea.tablaLibros.setValueAt(libro.getEditorial().getNombre(), i, 1);
            panelConsultarLibrosPorArea.tablaLibros.setValueAt(libro.getTitulo(), i, 2);
            panelConsultarLibrosPorArea.tablaLibros.setValueAt(fechaPublicacion, i, 3);
            panelConsultarLibrosPorArea.tablaLibros.setValueAt(libro.getIdioma(), i, 4);
            panelConsultarLibrosPorArea.tablaLibros.setValueAt(libro.getCantidadBusquedas(), i, 5);
        }
    }

    public void limpiar() {
        for(int i = 0; i < panelConsultarLibrosPorArea.tablaLibros.getRowCount(); i++){
            DefaultTableModel tmp = (DefaultTableModel)panelConsultarLibrosPorArea.tablaLibros.getModel();
            tmp.removeRow(i);
            if(tmp.getRowCount()>0){
                limpiar();
            }
        }
    }

    public void exportar() {
        try {
            exportarADocumento();
        } catch(FileNotFoundException ex) {
            JOptionPane.showMessageDialog(panelConsultarLibrosPorArea, "No se encuentra el archivo para exportar", "Exportar", JOptionPane.INFORMATION_MESSAGE);
        } catch(DocumentException ex) {
            JOptionPane.showMessageDialog(panelConsultarLibrosPorArea, "Error al tratar de escribir los datos en el documento pdf", "Exportar", JOptionPane.INFORMATION_MESSAGE);
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(panelConsultarLibrosPorArea, "Error al tratar de crear el archivo", "Exportar", JOptionPane.ERROR_MESSAGE);
        }
    }

    private void exportarADocumento() throws IOException, FileNotFoundException, DocumentException {
        File archivo;
        JFileChooser selectorArchivos = new JFileChooser();
        selectorArchivos.addChoosableFileFilter(new FiltroDocumentos());
        int op = selectorArchivos.showSaveDialog(null);
        if(op == JFileChooser.APPROVE_OPTION){
            archivo = selectorArchivos.getSelectedFile();
            String extension = new FiltroDocumentos().getExtension(archivo);
            if(archivo.createNewFile()){
                if(extension == null){
                    //archivo.renameTo(new File(archivo.getAbsolutePath()+".pdf"));
                    archivo.delete();
                    archivo = new File(archivo.getAbsolutePath()+".pdf");
                    crearDocumentoPDF(archivo);
                }else if(!extension.equals("pdf")){
                    JOptionPane.showMessageDialog(selectorArchivos, "El archivo debe tener extension pdf", "Guardar", JOptionPane.INFORMATION_MESSAGE);
                    archivo.delete();
                }else{
                    crearDocumentoPDF(archivo);
                }
            }else{
                JOptionPane.showMessageDialog(selectorArchivos, "Ya existe un archivo con nombre "+archivo.getName(), "Guardar", JOptionPane.WARNING_MESSAGE);
            }
        }
    }

    private void crearDocumentoPDF(File archivo) throws FileNotFoundException, DocumentException, BadElementException, MalformedURLException, IOException {
        DocumentoPDF documentoPDF = new DocumentoPDF(archivo);
        DocumentoPDF.SIZELETRA = 5;
        documentoPDF.agregarParrafoJustificado(""+Calendar.getInstance().getTime());
        DocumentoPDF.SIZELETRA = 12;
        documentoPDF.agregarParrafoCentrado("BiblioSoft :: Libros Por Area De Conocimiento");
        Image imagen = Image.getInstance(DocumentoPDF.class.getClassLoader().getResource("Imagenes/LogoBiblioSoft.gif"));
        documentoPDF.agregarImagenCentrada(imagen);
        String tipoLetra = "arial";
        int sizeLetra = 6;
        int formato = Font.NORMAL;
        BaseColor color = BaseColor.BLACK;
        documentoPDF.agregarTabla(panelConsultarLibrosPorArea.tablaLibros, tipoLetra, sizeLetra, formato, color);
        documentoPDF.cerrarDocumento();
        JOptionPane.showMessageDialog(panelConsultarLibrosPorArea, "El Informe ha sido exportado con exito", "Exportar", JOptionPane.INFORMATION_MESSAGE);
    }
    
}
